home *** CD-ROM | disk | FTP | other *** search
/ The Learning Curve / The Learning Curve (Weird Science, 1996).iso / electronics / analog_emulator / aces-docs / appendixd < prev    next >
Text File  |  1995-09-07  |  41KB  |  1,336 lines

  1.  
  2.  
  3.                    ** APPENDIX D ** (Preliminary Docs.) 
  4.  
  5.  
  6.                               -Example 01-
  7.  
  8.                               -SpringMass-
  9.  
  10. This classical example can best illustrate analog programming 
  11. techniques. 
  12.  
  13.    Consider the second-order differential equation describing tne motion 
  14. of a mass (M) which is connected to a stationary support by the 
  15. combination of a spring of stiffness (k) and a damping device with 
  16. viscous damping factor (b). Using the basic equation F = MA and writing 
  17. a force balance we have:
  18.  
  19.            (b Xdot + k X) - (M * Xdotdot) = 0.
  20.  
  21. where:
  22.            Xdotdot = acceleration of mass. (ft./sec./sec.)
  23.            Xdot    = velocity of mass. (ft./sec.)
  24.            X       = deflection of mass from rest position. (ft.)
  25.            M       = units of mass. (lb.- weight)
  26.            k       = spring constant. (lb./ft.)
  27.            b       = damping factor. (lb.-sec/ft.)
  28.  
  29.  
  30.  
  31. Rewriting in terms of the highest derivative since we will use 
  32. integration..
  33.  
  34.                    Xdotdot = (Xdot * s/-M) + (X * k/-M) or
  35.                    Xdotdot = -1/M (s Xdot + k X)
  36.  
  37.  
  38. Assuming a mass of size 5.0       (161.0  lb. weight)
  39.  
  40.  
  41. For initial conditions, we have: (X t=0) = 0.0 ft. / sec. (at rest).
  42.                                  (X t=0) = -10.0 ft. (initial 
  43.                                  deflection).
  44.  
  45. For the constants let's use:
  46.                                   k = 1 lb. / ft.
  47.                                   b = 2 lbs./ sec./ sec.
  48.  
  49.  
  50.  
  51. Assumed maximums:                 X = 10.0 ft. / sec.
  52.                                   X = 10.0 ft.
  53.  
  54. The analog scaling becomes:
  55.  
  56.  
  57.  
  58.               [Xdotdot/10] = -1/M (b [Xdot/10] + k [X/10])
  59.  
  60.  
  61.  
  62. With scaled initial conditions of:
  63.  
  64.              ([Xdot/10] = 0.0, t = 0 ) {at rest}                                
  65.  
  66.              ([X/10] = -1.0, t = 0)    {-10 / 10}
  67.  
  68.  
  69.     Independent value (time units) will be in seconds. Since the 
  70. undamped frequency will be k/m (radians/second) and the total length of 
  71. time to observe 2 cycles would be approximately 25 sec.. For the step 
  72. size, we can use .05 sec.(total time/ 20 steps for each cycle). We can 
  73. accept a print frequency of 2 seconds.
  74.  
  75. Preparing the block diagram: We start by implementing the equation for 
  76. the highest derivative. We assume we have the input terms of Xdot and X 
  77. available. We can use a weighted summer (W) block to form the X double 
  78. dot variable. We can assign Block 1 to this module. Input 1 will come 
  79. from a block representing X dot and Input 2 will come from a block 
  80. representing X. Parameter 1 is associated with Input 1 and Parameter 2 
  81. is associated with Input 2. (Parameter 3 and Input 3 are not used.)  
  82.  
  83.  Drawing the diagram at this point we have:
  84.  
  85.                                   p1
  86.  
  87.                            e1   --O-|\   1
  88.                                     | \______  [Xdotdot/10]
  89.                                     | /
  90.                            e2   --O-|/  [W]
  91.  
  92.                                   p2
  93.  
  94.  
  95.   Notice that the output of Block 1 is labeled with the scaled quantity X 
  96. double dot. Having formed the output of X double dot we can now use it 
  97. to form X dot.
  98.  
  99.    X dot is formed by integrating X double dot. We can use an Integrator 
  100. module for this operation. Since the parameter used is 1.0, we can use 
  101. the first input of the Integrator module (I). We can assign this module 
  102. Block 2. We draw a line from the output of Block 1 to the first input of 
  103. Block 2. The output of Block 2 will be labeled with the scaled quantity 
  104. of X dot. The first parameter (Parameter 1) is used to set the initial 
  105. value of X dot.
  106.  
  107.                              p1/IC = 0.0
  108.  
  109.                         \      O
  110.                        1 >----|-|\
  111.                         /     |-| \    2
  112.                           p2 O|-|  \______   [Xdot/10]
  113.           [Xdotdot/10]        |-|  /
  114.                               |-| /   [I]
  115.                           p3 O|-|/   
  116.  
  117.  
  118.  
  119.    We now can form the quantity X by integrating the output of X dot. We 
  120. do this with another Integrator module, which we will assign to Block 3.
  121. Again we have a parameter of 1.0 associated with the scaling so we can 
  122. use the first input of Block 3. The output of Block 3 now represents the 
  123. deflection X. The first parameter (Parameter 1) is used to set the 
  124. initial value of X.
  125.  
  126.  
  127.                              p1/IC = -1.0
  128.  
  129.                         \      O
  130.                        2 >----|-|\
  131.                         /     |-| \    3
  132.                           p2 O|-|  \______   [X/10]
  133.           [Xdot/10]           |-|  /
  134.                               |-| /   [I]
  135.                           p3 O|-|/   
  136.  
  137.  
  138.  
  139.  
  140.    We now go back where we started. We assumed we had the quantities X 
  141. dot and X when we formed X double dot. we now have the actual block 
  142. assignments for these terms. We now connect a line between the output of 
  143. Block 2 (X dot) and Input 1 of Block 1. We also connect a line between 
  144. the output of Block 3 (X) and Input 2 of Block 1. Parameters 1 and 2 
  145. will contain the respective coefficients for -b/m and k/m terms. The 
  146. scaled value of these parameters can be written on the diagram for 
  147. reference. 
  148.  
  149.  
  150.                                   p1 = -(b/M)
  151.                 [Xdot/10]    \       
  152.                            2  >--O-|\   1
  153.                              /     | \______  [Xdotdot/10]
  154.                          \         | /
  155.               [X/10]   3  >------O-|/  [W]
  156.                          /
  157.                                   p2 = -(k/M)
  158.  
  159.  
  160.  
  161. Our configuration diagram is now complete.
  162.  
  163.                   -----------
  164.                   |\       /|
  165.                   | \     / |
  166.                   |  \   /  |
  167.                   |   \ /   |
  168.                   |    X    |        Figure X
  169.                   |   / \   |
  170.                   |  /   \  |
  171.                   | /     \ |
  172.                   |/       \|
  173.                   -----------
  174.  
  175.  
  176.  
  177.     We now have all the information, at hand, that we need to prepare an 
  178. ACES dataset to implement the above scaled equations and run the analog.
  179.  
  180. The first (configuration) data section will become:
  181.  
  182. acc.[Xdot2/10] 1 W 2 3 0
  183. veloc.[Xdot/1] 2 I 1 0 0
  184. distance [X/1] I 3 2 0 0
  185. #
  186.  
  187. The second (parameter) data section will become:
  188.  
  189. b/m,k/m 1 1.0 2.0 0.0 10.0 0.0
  190. Xdot(t=0) 2 0.0 0.0 0.0 10.0 0.0
  191. X(t=0) 3 -1.0 0.0 0.0 10.0 0.0
  192. #
  193.  
  194. Integration data section:
  195.  
  196. 0.05 25.0 0.2
  197. #
  198.  
  199. Print assignment data:
  200.  
  201. 1 2 3 0 0 0 0
  202. #
  203.  
  204. Plot assignment data:
  205.  
  206. 76 1 2 3 0 0
  207. #
  208.  
  209. Final record mark (include 1 extra mark for end function data area):
  210.  
  211. #
  212.  
  213.  
  214.   This is the minimum data required to run an ACES application. The plot 
  215. data can be expanded and arbitrary function data added if required. (The 
  216. dataset above is named SpringMass and is included in the Examples drawer 
  217. of your distribution). 
  218.  
  219.  
  220.                            -EXAMPLE 02-
  221.  
  222.                             -SineWave-
  223.  
  224.    This example is used to show the effects of chosen step size on 
  225. simulated analog accuracy. ACES includes both sine (S) and cosine (C) 
  226. modules. Here the sine-omega-t and cosine-omega-t functions are 
  227. generated analyticly and then compared against the output of of the 
  228. included functions. All ACES modules use the AMIGA double-precision 
  229. floating math library functions. The equations for this example are:
  230.  
  231.  
  232.                    Sine-omega-t = (integral) Cosine-omega-t
  233.                  
  234.                    Cosine-omega-t = -(integral) Sine-omega-t
  235.  
  236.  
  237.    Since the values of sine and cosine are in the range -1.0  - +1.0 The 
  238. scale factor will be 1.0...
  239.  
  240.  
  241. Implementing the analog flow diagram we have:
  242.  
  243.  
  244.                   -----------
  245.                   |\       /|
  246.                   | \     / |
  247.                   |  \   /  |
  248.                   |   \ /   |
  249.                   |    X    |        Figure X
  250.                   |   / \   |
  251.                   |  /   \  |
  252.                   | /     \ |
  253.                   |/       \|
  254.                   -----------
  255.  
  256.  
  257.  
  258. Adding the internal math functions and subtracting to form error term:
  259.  
  260.  
  261.  
  262.                   -----------
  263.                   |\       /|
  264.                   | \     / |
  265.                   |  \   /  |
  266.                   |   \ /   |
  267.                   |    X    |        Figure X
  268.                   |   / \   |
  269.                   |  /   \  |
  270.                   | /     \ |
  271.                   |/       \|
  272.                   -----------
  273.  
  274.  
  275. We will check at 1 hertz (1 cycle/second = 6.2832 radians/sec.).
  276.  
  277.  
  278. Preparing a dataset:
  279.  
  280.   A dataset named SineWave has already been prepared. SineWave can be found in the Examples drawer.
  281.  
  282.   The end value of t = 3 sec.. is chosen so that three cycles will be 
  283. calculated. The step size chosen (0.05) will give 20 steps/cycle or 60 
  284. steps for the run. This is a reasonable step size and should give good 
  285. results in terms of both frequency and amplitude accuracy. Variables 
  286. will print out every 0.1 second of operate time. All 6 variables are 
  287. printed. The plot file has been set up for variable presentation and 
  288. scaling.
  289.  
  290.    Load and run the SineWave dataset. Select Operate Mode and observe 
  291. the calculated data and especially the error calculations. Return to the 
  292. Setup mode and select EDIT from the DATA menu. Click on the Time 
  293. Parameters box and change the line to change the step size to 0.1 (10 
  294. steps/cycle) as :
  295.  
  296. 0.1 3.0 0.1
  297.  
  298.    Click on Modify to change the data. Exit the editor and re-Run the 
  299. dataset. Select the Operate mode and compare results to the previous 
  300. calculation. Return to Setup mode, select the editor, and change the 
  301. step size to 0.025 (40 steps/cycle) as:
  302.  
  303. 0.025 3.0 0.1
  304.  
  305.    As before, Modify, Exit, ReRun, and Re-Operate. Compare the results 
  306. of the the calculations to the two previous times. Get a feel for the 
  307. physical time involved for doing the calculations. Compute time and 
  308. accuracy are somewhat inversely proportional to each other and are a 
  309. function of step size. At an artificially large step size, the 
  310. calculations will fall apart primarily due to the phase errors.
  311.  
  312.    Return to the Setup mode and select PLOTTER. Set up for two channels 
  313. of Y, and select the highest plot Density. Put the Plot window to the 
  314. rear of the window and reRun the dataset. Select Operate mode and then 
  315. put the plot window to the front. You should see three cycles of the 
  316. sine and cosine function being plotted in the Plot window. The 
  317. computation will proceed to the end and reach the Hold mode. Put the 
  318. plot window to the rear. Select Setup mode, Enable the Editor and change 
  319. the first and second lines in the plot record to:
  320.  
  321. 2 1 2 0 0 0
  322. 1.0 -1.0 1.0 -1.0
  323.  
  324.    Close the Editor, reRun the data, and select Operate mode. Bring the 
  325. plot window to the front and observe the plot. We are now plotting the 
  326. sine function verses the cosine function (a circle). Get familiar with 
  327. the plotter, change scaling, add grids, change density etc.
  328.  
  329.  
  330.                             -Example 03-
  331.  
  332.                               -PHYSBE-
  333.  
  334.    The differential equations in this example were first introduced by 
  335. McLoed as a PHYsiological Simulation Benchmark Experiment (PHYSBE) for 
  336. comparing simulation tools and techniques available for physiological 
  337. calculations. The equations represent a very simplified volumetric model 
  338. of the human circulatory system including the heart's pumping function. 
  339. This example illustrates the use of ramps and arbitrary functions in 
  340. analog computation. PHYSBE has been used as a de-facto benchmark to test 
  341. analog equipment and particularly analog emulators for speed and 
  342. accuracy. This might be considered a "medium" scale simulation, based on 
  343. the number of modules (56) and complexity of the system. A continuous 
  344. material balance is performed during computation.
  345.  
  346.  
  347. The differential equations to be solved are as follows:
  348.  
  349. Heart right ventrical-
  350.  
  351.   dVrv
  352.  ----- = Ftv - Fpv         Vrv (t=0) = 150.0 cc.
  353.   dt
  354.  
  355.   Prv = Vrv/Crv  
  356.  
  357.  
  358.  
  359. Pulmonary arterial system-
  360.  
  361.   dVap
  362.   ---- = Fpv - Fps         Vap (t=0) = 120.0 cc.
  363.   dt
  364.  
  365.   Pap = 0.133 Vap
  366.  
  367.   Fpv = 90.0 (Pav - Pap)
  368.  
  369.  
  370. Pulmonary venous system-
  371.  
  372.   dVvp
  373.   ---- = Fps - Fmv         Vvp (t=0) = 240.0 cc.
  374.   dt
  375.  
  376.   Pvp = 0.033 Vvp
  377.  
  378.   Fps = 0.70 (Pap - Pvp)
  379.  
  380.  
  381. Heart left ventrical-
  382.  
  383.   dVev
  384.   ----  = Flv -Fmv         Vlv (t=0) = 150.0 cc.
  385.   dt
  386.  
  387.   Plv = Vlv/Clv where Clv is a function of time.
  388.  
  389.  
  390.   Flv = 17.0 (Pvp -Plv)
  391.  
  392.  
  393. Aorta-
  394.  
  395.   dVao 
  396.   ---- = Fav - Fas         Vao (t=0) = 150.0 cc.
  397.   dt
  398.  
  399.  
  400.   Pav = 0.80 Vao
  401.  
  402.  
  403.   Fav = 80.0 (Plv -Pav)
  404.  
  405.  
  406. Systemic circulation-
  407.  
  408.   dVsc 
  409.   ---- = Fas - Fvs          Vsc (t=0) = 3340.0 cc.
  410.   dt
  411.  
  412.   Psc = 0.0153 Vsc
  413.  
  414.   Fas = 1.630 (pav - Psc)   
  415.  
  416.  
  417. Vena cava-
  418.  
  419.   dVvc 
  420.   ---- = Fxx - Fxx         Vvc (t=0) = 500.0 cc.
  421.   dt
  422.  
  423.   Pxx = 0.0040 Vvc
  424.  
  425.   Fvs = 1.650 (Psc - Pvc)
  426.  
  427.   Where all volumes are in cubic centimeters, all pressures in mm. hg., 
  428. and all flows are in cubic centimeters / second.
  429.  
  430. We will add a material balance to sum all the blood volumes considered.
  431.  
  432.   Vt - (Vrv + Vap + Vvp + Vlv + Vao + Vsc + Vvc) = 0.0
  433.  
  434.  
  435. The scaled equations become:
  436.  
  437. Heart right ventrical-
  438.  
  439.    [dVrv
  440.   -------  = [Ftv/250] - [Fpv/250]     [Vrv/250] (t=0) = 150./250 = 0.6
  441.   dt/250]
  442.  
  443.   [Prv/250] = [Vrv/250]/[Crv/250]  
  444.  
  445.  
  446.  
  447. Pulmonary arterial system-
  448.  
  449.    [dVap
  450.   ------- = [Fpv/250] - Fps[            Vap (t=0) = 120./250. = 0.48
  451.   dt/250]
  452.  
  453.   [Pap/250] = 0.133 [Vap/250]           (Pap limited to positive)
  454.  
  455.   [Fpv/250] = 90.0 ([Pav/250] - [Pap/250])
  456.  
  457.  
  458. Pulmonary venous system-
  459.  
  460.    [dVvp
  461.   ------- = 0.5 (Fps/250] - [Fmn/250])  Vvp (t=0) = 240./500. = 0.48
  462.   dt/500]
  463.  
  464.   [Pvp/250] = 0.033 ( 2.0 [Vvp/500]) = 0.066
  465.  
  466.   [Fps/250] = 0.70 ([Pap/250] - [Pvp/250])
  467.  
  468.  
  469. Heart left ventrical-
  470.  
  471.    [dVev
  472.   ------- = [Flv/250] - [Fmv/250]      [Vlv/250] (t=0) = 150./250.
  473.   dt/250]
  474.  
  475.   [Plv/250] = [Vlv/250]/[Clv/250] where Clv is a function of time.
  476.  
  477.  
  478.   [Flv/250] = 17.0 ([Pvp/250] -[Plv/250]) Flv limited to positive.
  479.  
  480.  
  481. Aorta-
  482.  
  483.    [dVao 
  484.   ------- = [Fav/250] - [Fas/250]      [Vao/250] (t=0) = 150./250. = 0.6
  485.   dt/250]
  486.  
  487.  
  488.   [Pav/250] = 0.80 [Vao/250]
  489.  
  490.  
  491.   [Fav/250] = 80.0 ([Plv/250] - [Pav/250])
  492.  
  493.  
  494. Systemic circulation-
  495.  
  496.    [dVsc 
  497.   -------- = 0.05 ([Fas/250] - [Fvs/250] 
  498.   dt/5000]                      
  499.                              [Vsc/5000] (t=0) = 3340./5000. = 0.668
  500.  
  501.   [Psc/ = 0.0153 (5000/250)  [Vsc/250] = 0.306 [Vsc/250]
  502.  
  503.   [Fas/250] = 1.630 ([Pav/250] - Psc[250])   
  504.  
  505.  
  506. Vena cava-
  507.  
  508.     [dVvc 
  509.    -------- = 0.25 [Fvs/250]- [Ftv/250] [Vvc/1000] (t=0) = 500./1000. = 
  510.    dt/1000]                                                0.5
  511.  
  512.   [Pvc/250] = 0.0040 (1000/250) [Vvc/1000] = 0.016 [Vvc/1000]
  513.  
  514.   [Fvs/250] = 1.650 ([Psc/250] - [Pvc/250])
  515.  
  516.  
  517. Material balance-
  518.  
  519.   [Vt/5000] - ( 0.05 [Vrv/250] + 
  520.                 0.05 [Vap/250] +
  521.                 0.10 [Vvp/500] +
  522.                 0.05 [Vlv/250] +
  523.                 0.05 [Vao/250] +
  524.                 1.00 [Vsc/5000] + 0.2 [Vvc/1000]) = 0.0
  525.  
  526.  
  527.  
  528. The scaled analog diagram is:
  529.  
  530.                   -----------
  531.                   |\       /|
  532.                   | \     / |
  533.                   |  \   /  |
  534.                   |   \ /   |
  535.                   |    X    |        Figure X
  536.                   |   / \   |
  537.                   |  /   \  |
  538.                   | /     \ |
  539.                   |/       \|
  540.                   -----------
  541.  
  542.    The Heart function Cv's have been implemented on two function modules 
  543. driven by a ramp function. Type 1 curve contains the right ventricle 
  544. function and Type 2 contains the left ventricle function. The 
  545. implementation is shown in the following figure:
  546.  
  547.  
  548.                   o---------o
  549.                   |\       /|
  550.                   | \     / |
  551.                   |  \   /  |
  552.                   |   \ /   |
  553.                   |    X    |        Figure X
  554.                   |   / \   |
  555.                   |  /   \  |
  556.                   | /     \ |
  557.                   |/       \|
  558.                   o---------o
  559.  
  560.  
  561.  
  562.    The total run time will be equivalent to 4 beats of the heart or 4.0 
  563. seconds. A step size of 0.01 sec has been deemed appropriate and a print 
  564. interval of 0.1 seconds will suffice. A dataset named PHYSBE is in the 
  565. Examples drawer. Note that the solution follows a stable cycle condition 
  566. and does not "drift" due to small errors and unbalances as it probably 
  567. would on an actual analog machine. 
  568.  
  569.  
  570.  
  571.  
  572.                             -Example 04-
  573.  
  574.                            -AnalogPID-
  575.  
  576.    ACES has a Proportional-Integral-Derivative (PID) analog 
  577. controller-type module in it's complement of module types. The PID 
  578. module (%) is implemented, internally, as a macro of ACES standard 
  579. modules. The following example uses one of the three available % modules 
  580. in a simple control scheme that maintains the height of liquid in a 
  581. tank. A step change is made in the flow rate out of the tank and the 
  582. controller must change the input flow rate to maintain level. The level 
  583. control is complicated by the fact that there is a measurement delay 
  584. associated with the tank liquid level. The controller is to be adjusted 
  585. to minimize overshoot and settling time due to the outflow step change. 
  586.  
  587.    This example demonstrates use of the PID (%) and the Unit Delay (U) 
  588. modules. The tank liquid level is to be maintained at 5.0 feet. The 
  589. outlet flow rate will be increased by a step change of 25% one second 
  590. after the start of the computation. Only Proportional and Reset 
  591. controller modes will be utilized. The equations for this example are:
  592.  
  593.   Qout (t=0) = 0.1 H/sec.         Qin = 0.2 Zout H/sec.  
  594.   
  595.   Qout (t=>1) = 0.125 H/sec.
  596.  
  597.   dH
  598.   --- = (Qin - Qout)       H (t=0) = 5.0 feet.  
  599.   dt
  600.                            H = f(Qin-Qout,t)
  601.  
  602.                            Zin = H/10.0 = 0 < 1.0
  603.  
  604.                            Zout = 0 < 1.0
  605.  
  606.                            * Q is in units of tank height. (H/sec.)
  607.  
  608.                            Z refers to the controller which is assumed
  609.                            to have a maximum input/output of 1.0 .
  610.  
  611.  
  612.  The scaled equations are:
  613.  
  614.   [Qout/10] (t=0) = 1./10 = 0.1         [Qin/0.2] = Zout 
  615.   
  616.   [Qout/10] (t=>1) = 1.25/10 = 0.125
  617.  
  618.   [dH
  619.   ------ = ([Qin/10] - [Qout/10])       [H/10] (t=0) = 5./10. = 0.5
  620.   dt/10]
  621.                            
  622.  
  623.  
  624. Initial Controller settings:
  625.  
  626.   Kp = -10.0 (Inverse action)
  627.  
  628.   Ki = 2.0 repeats/sec.
  629.  
  630.   Kd = 0.0 (No action)
  631.  
  632.   Zout (t=0) = 0.5
  633.  
  634.   Zsp = 0.5   (Equivalent to 5.0 ft. level)
  635.  
  636.  
  637.   A total operation time of 10 seconds is to be observed, with the 
  638. outflow increased by 25%, 1 second after starting operation. The 
  639. measurement delay is set at 1.0 second. 
  640.  
  641. The analog flow diagram is as follows:
  642.  
  643.  
  644.                   -----------
  645.                   |\       /|
  646.                   | \     / |
  647.                   |  \   /  |
  648.                   |   \ /   |
  649.                   |    X    |        Figure X
  650.                   |   / \   |
  651.                   |  /   \  |
  652.                   | /     \ |
  653.                   |/       \|
  654.                   -----------
  655.  
  656.  
  657.     A dataset named AnalogPid can be found in the Examples drawer. After 
  658. "Running" the data set, select the Control Panel option. The PID 
  659. controller settings can be varied for each run by changing Par1 and Par2 
  660. (proportional and integral gains respectively) and re-operating to get a 
  661. new condition. Rep/Op mode may also be used to cycle the example 
  662. automatically between I/C and Operate modes. Select Hold mode to halt 
  663. Rep/Op. Experiment with the controller parameters and try to optimize 
  664. the settings to reduce tank liquid level overshoot and settling times. 
  665.  
  666. Note: Parameter settings made with the Control Panel are only temporary. 
  667. To make any parameter changes permanent, you must Edit and Save the 
  668. dataset.
  669.  
  670.                              -Example 05-
  671.  
  672.                              -SamplePid-
  673.  
  674.    This example uses the same simple liquid tank level problem as in the 
  675. previous example 04. This example uses sample-hold (zero-order-hold) and 
  676. unit delay hybrid analog devices to implement the controller. The 
  677. implementation of the sampling controller is as follows:
  678.  
  679.  
  680.                   o---------o
  681.                   |\       /|
  682.                   | \     / |
  683.                   |  \   /  |
  684.                   |   \ /   |
  685.                   |    X    |        Figure X
  686.                   |   / \   |
  687.                   |  /   \  |
  688.                   | /     \ |
  689.                   |/       \|
  690.                   o---------o
  691.  
  692.  
  693.  
  694.    The control algorithm is implemented by using zero-order-hold (Z) and 
  695. unit delay (U) modules. Parameters Ka and Kb are somewhat equivalent to 
  696. their proportional and integral gain analog PID counterparts.
  697.  
  698. The analog flow diagram is as follows:
  699.  
  700.  
  701.                   o---------o
  702.                   |\       /|
  703.                   | \     / |
  704.                   |  \   /  |
  705.                   |   \ /   |
  706.                   |    X    |        Figure X
  707.                   |   / \   |
  708.                   |  /   \  |
  709.                   | /     \ |
  710.                   |/       \|
  711.                   o---------o
  712.  
  713.  
  714.    The dataset for this example can be found in the Examples drawer 
  715. under the name SamplePid.
  716.  
  717. For all practical purposes, this example can be operated very similarly 
  718. to Example 04.
  719.  
  720.  
  721.                              -Example 06-
  722.  
  723.                                -Splat-
  724.  
  725.    The pilot ejection problem, featured in this example, has been used 
  726. as a basis for comparison of analog simulations using continuous system 
  727. languages such as MIMIC, CSSL, MIDAS, and others. The problem statement 
  728. is taken from the MIMIC programming language manual. 
  729.  
  730.    In this investigation, the trajectory of a pilot and his seat 
  731. assembly, while ejecting from the aircraft, is calculated. It is 
  732. necessary to determine whether the pilot is safely ejected clear of the 
  733. trailing  part of the aircraft without subjecting him to unnecessary 
  734. forces. The vertical stabilizer is located 14 feet higher and 60 feet to 
  735. the rear of the cockpit. The seating system is mounted on rails and is 
  736. designed to move the pilot and his seat assembly, at an angle, up and 
  737. towards the rear of the craft, at a specified velocity. The pilot and 
  738. seat assembly clear the aircraft after traveling a vertical distance of 
  739. 4.0 feet along the rails. At this point, the pilot is subjected to the 
  740. drag forces due to his velocity in the air and follows a trajectory out 
  741. and, hopefully, above the path of the plane.
  742.  
  743. The equations involved in this example are:
  744.  
  745.  
  746.   dTheta
  747.   ------ = 0.0 (y < 4)          Theta (t=0) = -.04532 rad. 
  748.    dt                                            (from vertical)
  749.           
  750.          = -32.2(cos Theta)/V (y > 4) 
  751.  
  752.  
  753.   dX
  754.   -- = V (cos Theta) -900.      X (t=0) = 0.0 fps.
  755.   dt
  756.  
  757.  
  758.   dY
  759.   -- = V (sin Theta)            Y (t=0) = 0.0 fps.
  760.   dy
  761.  
  762.  
  763.   dV
  764.   -- = 0.0 (Y < 4)              X (t=0) = 900.0 - Vs
  765.   dt
  766.      = -0.001698 * Vsqr -32.2 (sin Theta) (Y > 4)
  767.  
  768.  
  769.  
  770.    We will include Yp, a function of X of the planes upper surface, to aid in visualization of the pilot's trajectory on the plot.
  771.  
  772.   Yp = f(X)
  773.  
  774.   
  775.  
  776. The scaled equations are:
  777.  
  778.  
  779.   [dTheta
  780.   ------ = 0.0 (y < 4)          Theta (t=0) = .04532 rad. 
  781.    dt/1]         
  782.          = -32.2/1000 (cos Theta)/[V/1000] (y > 4) 
  783.  
  784.  
  785.     [dX
  786.   ------- = (1000/100) [V/1000] (cos Theta) -900/100. 
  787.   dt/100]                            X (t=0) = 0.0 
  788.  
  789.  
  790.  
  791.    [dY
  792.   ------ = (1000/20) [V/1000] (sin Theta)          
  793.   dy/20]
  794.                                     [Y/20](t=0) = 0.0
  795.  
  796.  
  797.    [dV
  798.   -------- = 0.0 (Y < 4)            [V/1000](t=0) = 900./1000 - [Vs/1000]
  799.   dt/1000]
  800.  
  801.     = -0.001698 * (1.0e03)([Vsqr/1.0e06] (-32.2/1.0e6) (sin Theta) 
  802.                                     ([Y/20] > 4)
  803.  
  804.  
  805.   [Yp/20] = f([X/100])
  806.  
  807.   
  808.   Escape velocity and rail inclination are the parameters to be 
  809. manipulated. The object of this study is to find the minimum velocity 
  810. and the best angle to use. The aircraft is assumed to be in level flight 
  811. at an airspeed of 900.0 FPS.   Use the Control Panel to manipulate the 
  812. parameters and the QUIK-PLOT window to observe trajectory. The ordinate 
  813. represents -X (the distance along the plane) and the abscissa Y (height 
  814. above the pilots normal seating position). Use of the logical AND (&) 
  815. and the quit module (Q) module are demonstrated. 
  816.  
  817. The analog flow diagram is as follows:
  818.  
  819.  
  820.                   o---------o
  821.                   |\       /|
  822.                   | \     / |
  823.                   |  \   /  |
  824.                   |   \ /   |
  825.                   |    X    |        Figure X
  826.                   |   / \   |
  827.                   |  /   \  |
  828.                   | /     \ |
  829.                   |/       \|
  830.                   o---------o
  831.  
  832.  
  833.  
  834. A dataset named Splat is in the Examples drawer.
  835.  
  836.  
  837.  
  838.  
  839.                           -EXAMPLE 7-
  840.  
  841.                             -Plate-
  842.  
  843.    In order to solve partial differential equations on an analog 
  844. computer, it is generally found that the best method of approaching the 
  845. solution is to reduce the partial equations to a set of ordinary 
  846. differential equations. The one-dimensional diffusion equation commonly 
  847. found in heat transfer work can be broken down to one continuous 
  848. variable and one space variable with time being the independent 
  849. variable. 
  850.  
  851.    We have the following partial differential equation describing the 
  852. one-dimensional diffusion of heat in a solid:
  853.  
  854.  
  855.              (partial)sqd. T   k (partial) T
  856.              --------------- = -------------
  857.              (partial) Xsqd.     (partial) t
  858.  
  859.  
  860.    Dividing X (the thickness of the plate) up into n equal spaces yields 
  861. the following equations for heat flow (through the thickness of the 
  862. plate) at the n'th station:
  863.  
  864.  
  865.   dT(n)     (Qin - Qout) * A
  866.   ----- =  ----------------- 
  867.   dt        rho * cp * V(n)
  868.  
  869.                  k * A
  870.   Qin - Qout  = --------  * ( T(n-1) - 2T(n) + T(n+1)
  871.                 delta X    
  872.  
  873.  
  874. Where k = conductivity in BTU / lb. - ft. - deg. F.
  875.  
  876.       rho = density in lb. / cu. ft.
  877.  
  878.       cp = heat capacity in BTU / lb. - deg. F.
  879.  
  880.       A = area considered in sq. ft.
  881.  
  882.       V = delta X * area of each section.
  883.  
  884.       delta X = internode distance (section size)
  885.  
  886.       Q = BTU / hr.
  887.  
  888.       sigma = Stefan-Boltzman constant 0.174e-08 (radiation)
  889.  
  890.  
  891.  
  892.   Equations for the internal sections:
  893.  
  894.  
  895.   dT(n)     (Qin - Qout) * A
  896.   ----- =  ------------------
  897.   dt        rho * cp * V(n)/2
  898.  
  899.                    k * A
  900.   Qin - Qout  = ----------- * ( T(n-1) - 2T(n) + T(n+1)
  901.                   delta X   
  902.  
  903.  
  904.  
  905.   Equations for the surface section:
  906.  
  907.   dT(0)     (Qin - Qout) * A
  908.   ----- =  ----------------- 
  909.   dt        rho * cp * 1/2 V(n)
  910.  
  911.                    k * A
  912.   Qin - Qout  = -----------  * ( T(1) - 2T(0) + T(1) +
  913.                 1/2 delta X    
  914.                                         k * [Ta - T0 +
  915.                              
  916.                 epsilon * E * ((Ta + 460) - (T0 + 460))
  917.  
  918.  
  919.   For the symmetrical center station:
  920.  
  921.  
  922.   dT(5)     (Qin - Qout) * A
  923.   ----- =  ------------------
  924.   dt        rho * cp * V(n)/2
  925.  
  926.                    k * A
  927.   Qin - Qout  = ----------- * ( T(4) - 2T(5) + T(4)
  928.                 delta X / 2   
  929.  
  930.  
  931. Consider the following assumptions:
  932.  
  933. Heat conduction is equal across the area of the plate (one dimensional).
  934.  
  935. We can use symmetry and calculate either half of the plate (Both 
  936. surfaces are subject to the same conditions of heat flow by convection 
  937. and radiation).
  938.  
  939. The material consists of a mild steel plate 1.0 inches thick radiating to a semi-infinate heat absorbing structure (constant temperature).
  940.  
  941. The thermal coefficients are constant over the temperature range.
  942.  
  943. The temperature gradients are "mild" and can be approximated by straight 
  944. lines, without excessive error, across the number of sections considered.
  945.  
  946. We will use 5 sections to represent the plate half width with 5 
  947. temperature nodes. The internode distance would be 1 inch / 2.0 divided 
  948. by 4 or 0.125 in. across each section. (The surface and center sections 
  949. are half sections/volumes).
  950.  
  951. It is assumed that the AISI 1010 carbon steel plate, which was heated to 
  952. a uniform temperature of 1500.0 degrees F.,  will be removed from a 
  953. furnace and placed on edge for cooling.
  954.  
  955.     The following heat transfer coefficients are to be used:
  956.  
  957.     rho (density) = 490.0 lb./ cu. ft.
  958.  
  959.     cp (heat capacity) = 0.16 BTU / lb. - deg. F.
  960.  
  961.     k (conductivity) = 16.0 BTU / hr. - ft. deg. F.
  962.  
  963.     h (convection air) = 2.0 BTU / hr. - deg. F.
  964.  
  965.     E (emissivity ) = 0.80
  966.  
  967.  
  968. We will scale an internal section:
  969.  
  970.  
  971.   [ dT(n)          2.0e04         [(Qin - Qout)/2.0e04] * 1
  972.   --------    =    -------  * --------------------------------
  973.   dt/2000]          2000.     490. * 0.12 * 0.125 * 0.125 /144
  974.  
  975.   [Qin -Qout       2000          12.0 * 1    [T(n-1) -2T(n) + T(n+1)
  976.   ----------  =  ------------- * --------  * -----------------------
  977.     2.0e04]       2.0e04         0.125/12             2000 ]
  978.  
  979.     
  980.  
  981.  
  982. Scaling the surface section:
  983.  
  984.  
  985.   [ dT(0)          2.0e04         [(Qin - Qout)/2.0e04] * 1
  986.   --------    =    -------  * --------------------------------
  987.   dt/2000]          2000.     490. * 0.12 * 0.125 * 0.125 /144
  988.  
  989.   [Qin -Qout       2000          12.0 * 1    [T(1) -2T(0) + T(1)
  990.   ----------  =  ------------- * --------  * ------------------- +
  991.     2.0e05]       2.0e05         0.0625/12          2000 ]
  992.  
  993.     
  994.                                2000             [Ta - T0
  995.                               ------ *  2.0 *  --------- +
  996.                               2.0e05              2000]
  997.  
  998.                  4                               4             4
  999.            (2500)                      [(Ta + 460) - (T0 + 460) 
  1000.           -------- *  0.8 * .174e-08 * -----------------------
  1001.            2.0e05                                 4 
  1002.                                               2500 ]
  1003.  
  1004. For the symmetrical half (center) section:
  1005.  
  1006.  
  1007.   dT(5)     (Qin - Qout) * A
  1008.   ----- =  ------------------
  1009.   dt        rho * cp * V(n)/2
  1010.  
  1011.                    k * A
  1012.   Qin - Qout  = ----------- * ( T(4) - 2T(5) + T(4) )
  1013.                 delta X / 2   
  1014.  
  1015.  
  1016. The scaled analog flow diagram is as follows:
  1017.  
  1018.                   o---------o
  1019.                   |\       /|
  1020.                   | \     / |
  1021.                   |  \   /  |
  1022.                   |   \ /   |
  1023.                   |    X    |        Figure X
  1024.                   |   / \   |
  1025.                   |  /   \  |
  1026.                   | /     \ |
  1027.                   |/       \|
  1028.                   o---------o
  1029.  
  1030.  
  1031.  
  1032.  
  1033.    A dataset named Plate can be found in the Examples drawer. Select the  QUIK-PLOT window and enable all 5 Y axis channels. Channel 1 represents 
  1034. the surface temperature node, 2 - 4 the internal nodes, in the physical 
  1035. center of each section through the plate, and Channel 5 represents the 
  1036. node at the center of the plate. The temperature points will be plotted 
  1037. against time, in minutes, on the abscicca. Run the dataset and select 
  1038. Operate mode. Notice how the internal temperatures lag behind the 
  1039. surface temperature as cooling occurs. Try changing the initial 
  1040. temperatures and/or some of the heat flow parameters. Remember that the 
  1041. temperature gradient for the model is assumed to be a straight line 
  1042. through each section. The model must be divided into smaller sections to 
  1043. properly represent thermal gradients due to more severe conditions of 
  1044. heating or cooling. Other surface boundry conditions can be added to 
  1045. this basic model.
  1046.  
  1047.                             -Example 08-
  1048.  
  1049.                              -Algebra-
  1050.  
  1051.    Occasionally, modeling of a system of equations, that contains 
  1052. algebraic equations, causes the computer to be forced to calculate an 
  1053. "algebraic loop". This is because a particular variable appears on both 
  1054. sides of an equation and must be solved for in an explicit manner. 
  1055. Sometimes it is possible, by manipulating the equation (by substitution 
  1056. or other method), to avoid solving the equations explicitly. This is the 
  1057. best way to handle the situation where this is possible. This example 
  1058. assumes this is not possible and attempts to solve the equation 
  1059. directly. The example chosen does, in this case, lend itself to 
  1060. manipulation, thus providing a check solution for the explicit case. 
  1061.  
  1062.    Persons, that are familiar with actual analog computing, know 
  1063. that you can generally program some algebraic loops directly by 
  1064. introducing a small, 1st order, lag in one or more of the amplifiers in 
  1065. the loop. This is accomplished by adding a small capacitance in the 
  1066. amplifier feedback path. Noise is always a by-product of calculating 
  1067. algebraic loops, in this manner, and must be dealt with or tolerated 
  1068. when measuring outputs of these variables. 
  1069.  
  1070.    ACES can't handle loops, in this manner, but we can force a similar 
  1071. delay action through use of a combination of the "wye" (Y) and the 
  1072. "vacuous" (V) elements. Converging of the loop is dependent on sign, 
  1073. gain, and (on digital emulation methods) step size. Positive algebraic 
  1074. loops, with gains greater than one, are always unstable. 
  1075.  
  1076. For this example we have a simple system of equations involving X and Y:
  1077.  
  1078.      dX     dY
  1079.      --- = ---- + XY - X
  1080.      dt     dt
  1081.  
  1082.      and
  1083.  
  1084.      dY        dX
  1085.     ----  = - ----  + Y
  1086.      dt        dt
  1087.  
  1088.  
  1089. Here dX/dt depends on dY/dt and vice-versa.
  1090.  
  1091.   Let:  Xmax = 10.
  1092.  
  1093.         Ymax = 10.
  1094.  
  1095. Scaling the Equations we have:
  1096.  
  1097.  
  1098.       [dX       [dY    (10)  [X  [Y     [X
  1099.      ------ =  ----- + ----  --- ---  - ---
  1100.      dt/10]    dt/10]    1   10] 10]    10]
  1101.  
  1102.      and
  1103.  
  1104.        [dY        [dX   
  1105.      ------ = - ------ + [Y/10]
  1106.      dt/10]     dt/10]
  1107.  
  1108.                   o---------o
  1109.                   |\       /|
  1110.                   | \     / |
  1111.                   |  \   /  |
  1112.                   |   \ /   |
  1113.                   |    X    |        Figure X
  1114.                   |   / \   |
  1115.                   |  /   \  |
  1116.                   | /     \ |
  1117.                   |/       \|
  1118.                   o---------o
  1119.  
  1120.  
  1121. When diagrammed the configuration appears as above. Note the heavy lines 
  1122. tracing the algebraic loop. This loop will be computationally unstable in 
  1123. its present form. We can modify this diagram, to break the loop, by 
  1124. inserting the Y and V elements, in combination, to simulate a slight 
  1125. computational delay. ( That is, a simulated, unity gain, amplifier with 
  1126. a small first-order delay). This will change the configuration diagram 
  1127. to:
  1128.  
  1129.                   o---------o
  1130.                   |\       /|
  1131.                   | \     / |
  1132.                   |  \   /  |
  1133.                   |   \ /   |
  1134.                   |    X    |        Figure X
  1135.                   |   / \   |
  1136.                   |  /   \  |
  1137.                   | /     \ |
  1138.                   |/       \|
  1139.                   o---------o
  1140.  
  1141.  
  1142.  
  1143. For comparison purposes we are going to change the equation for dX/dt by 
  1144. substitution:
  1145.  
  1146.  
  1147.       dX     (dX 
  1148.      --- = - --- + Y) + XY - X 
  1149.       dt      dt
  1150.  
  1151.  
  1152.   or
  1153.  
  1154.       dX
  1155.       --- = 0.5 (XY -X + Y)
  1156.       dt
  1157.  
  1158. Scaling these equations:
  1159.  
  1160.  
  1161.         [dX        ((10  [X  [Y    [X     [Y
  1162.        ------= 0.5 ---  ---  --- - --- + ---
  1163.        dt/10]        1)  10] 10]   10]    10])
  1164.  
  1165.  
  1166.         [dY        [dX   
  1167.        ------ = - ------ + [Y/10]    (as before).
  1168.        dt/10]     dt/10]
  1169.  
  1170. The analog diagram for this system of equations becomes:
  1171.  
  1172.  
  1173.                   o---------o
  1174.                   |\       /|
  1175.                   | \     / |
  1176.                   |  \   /  |
  1177.                   |   \ /   |
  1178.                   |    X    |        Figure X
  1179.                   |   / \   |
  1180.                   |  /   \  |
  1181.                   | /     \ |
  1182.                   |/       \|
  1183.                   o---------o
  1184.  
  1185.  
  1186.    We will solve both sets of equations simultaneously and form an error 
  1187. term for comparison. The algebraic loop calculation will have a small 
  1188. error, the magnitude of which, is adjustable by changing the Y element 
  1189. error coefficient (P2).
  1190.  
  1191.   Use the dataset named Algebra in the Examples drawer. Load and run the 
  1192. dataset. Select Operate mode and observe, in the log, the operation of 
  1193. both implementations. The settings for the example are somewhat 
  1194. optimized and the error in the loop calculation minimal. Try increasing 
  1195. the allowable error in the Y element (P2) and note the action on the 
  1196. algebraic loop calculation. Vary the convergence factor (P3) on the Y 
  1197. element and note any change in the physical calculating time. P3 can be 
  1198. varied from about 0.1 to 0.9. Lower values gives more damping. Higher 
  1199. values more overshoot during convergence to error value. Values around 
  1200. 0.5 will generally give acceptable results. The physical calculating 
  1201. time can be minimized by judicious setting of P3. Vary the initial 
  1202. values of X and Y and the range of operate total time (t).
  1203.  
  1204.  
  1205.                            -Example 09-
  1206.  
  1207. Curves 1,2, & 3
  1208.  
  1209.    Sometimes, in the course of an investigation, you may find a set of 
  1210. simultaneous differential equations in which the parameters are not 
  1211. known. Generally the values of these parameters can only be found by 
  1212. trial and error. One possible way is to try to vary all unknown 
  1213. parameters incrementally, holding the others constant, until the proper 
  1214. solution is found. 
  1215.  
  1216.    Parameter "sweeps" of this nature are very time consuming. ACES has 
  1217. two things in it's repertoire that can aid in finding unknown parameters 
  1218. and/or boundry values. The first is REP-OP mode. Placing the emulator in 
  1219. repeated operation, allows the computer to continuously repeat the 
  1220. calculations while the operator can "twittle" the parameters of 
  1221. interest. The second is the iterative element (?). This element can 
  1222. execute a parameter sweep or act as an iterative control element to 
  1223. adjust a variable and/or parameter based on an algorithm producing an 
  1224. error term. The iterative (?) element is only functional in REP-OP mode.
  1225.  
  1226.    The example used, to illustrate the use of these features, is a basic 
  1227. curve fitting problem. Some data has been collected in a field study. 
  1228. The researcher believes that the data function Y = f(X) can be 
  1229. represented by a mathematic model involving a very simple differential 
  1230. equation. The equation is as follows:
  1231.  
  1232.  
  1233.    dY
  1234.    -- = -aY + b
  1235.    dX
  1236.  
  1237.  
  1238.  
  1239.   The parameters (a) and (b) are to be adjusted to best fit the 
  1240. collected data for 0 < Y < 10000. Scaling the equation gives:
  1241.  
  1242.  
  1243.  
  1244.       [dY         [ Y       b
  1245.    --------- = -a ------ + -----
  1246.    dX/10000]      10000]   10000
  1247.  
  1248.  
  1249.  
  1250.    The first example (Curve1) is a manual implementation to be used in 
  1251. REP-OP mode, in conjunction with, the Control Panel to adjust observable 
  1252. best fit of the equation to the data points. The data points are 
  1253. programmed as an arbitrary function curve. An error term is formed by 
  1254. subtracting the collected experimental data values from the Y term of 
  1255. the analytical solution. The acceptability of fit is left up to the 
  1256. operator's judgment. There is a performance indicator programmed to 
  1257. give a running R.M.S. error value curve for the entire range considered. 
  1258.    Parameter (-a) is Px on Block x, Parameter (b) is Px on Block x. The 
  1259. following configuration diagram represents the above equations:
  1260.  
  1261.  
  1262.                   o---------o
  1263.                   |\       /|
  1264.                   | \     / |
  1265.                   |  \   /  |
  1266.                   |   \ /   |
  1267.                   |    X    |        Figure X
  1268.                   |   / \   |
  1269.                   |  /   \  |
  1270.                   | /     \ |
  1271.                   |/       \|
  1272.                   o---------o
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.    The second example (Curve2) automates the parameter search for 
  1279. parameter (a). The ? element replaces the K element representing 
  1280. parameter (a) from the previous example. Load, Run and Repetitively 
  1281. Operate dataset Curve2. Notice the interaction of parameter (a) when 
  1282. changing parameter (b). Notice that the overall R.M.S. error is most 
  1283. proportional to parameter (b) while the maximum error along the length of 
  1284. the curve is more sensitive to parameter (a). The following 
  1285. configuration diagram represents the changes:
  1286.  
  1287.  
  1288.                   o---------o
  1289.                   |\       /|
  1290.                   | \     / |
  1291.                   |  \   /  |
  1292.                   |   \ /   |
  1293.                   |    X    |        Figure X
  1294.                   |   / \   |
  1295.                   |  /   \  |
  1296.                   | /     \ |
  1297.                   |/       \|
  1298.                   o---------o
  1299.  
  1300.  
  1301.  
  1302.   The third example (Curve3) further automates the search for the best 
  1303. fit to the data. A pair of zero-order-hold (Z) elements are programmed 
  1304. to store the error values near the first (X = 0.1) and last (X = 0.6) 
  1305. portions of the error curve. An iterative element is added for adjusting 
  1306. parameter (b). Action of the ? elements is such that parameters (a) and 
  1307. (b) will simultaneously converge toward a point of minimum error at the value of X selected. The ? elements are programmed for a "ballpark" 
  1308. initial condition and a nominal response gain. The operator can stop the 
  1309. calculations (Selecting Hold mode) when no further improvement is observed. 
  1310.  
  1311.    It is found that this model does fit the data extremely well once the 
  1312. proper parameters are found. Try adjusting the response gain of the ? 
  1313. elements. The points of error comparison (values of X) can also be 
  1314. changed from 0.1 and 0.6, possibly to find a point of better sensitivity 
  1315. to instantaneous and overall fit errors. The configuration diagram for 
  1316. this variation is as follows:
  1317.  
  1318.  
  1319.  
  1320.  
  1321.                   o---------o
  1322.                   |\       /|
  1323.                   | \     / |
  1324.                   |  \   /  |
  1325.                   |   \ /   |
  1326.                   |    X    |        Figure X
  1327.                   |   / \   |
  1328.                   |  /   \  |
  1329.                   | /     \ |
  1330.                   |/       \|
  1331.                   o---------o
  1332.  
  1333. -------------------------------------------------------------------------
  1334.  
  1335.                                 [end]
  1336.